import { z } from "zod";
import { TaskType, TaskStatus } from '../type.js';
import { createTask } from '../../../service/cron.js';
import { prisma } from '../../../service/mysql.js';

export default {
    api: "createScheduleTask",
    name: "创建计划任务",
    description: "根据客户的描述，创建计划任务，比如：每个月8号提醒我还贷款。",
    requestSchema: z.object({
        taskType: z.string().describe("任务类型，可选值：一次性任务/周期性任务"),
        cronExpression: z.string().describe("Unix crontab表达式，crontab表达式一共五位，分别代表分钟(0-59)/小时(0-23)/一个月中的第几天(0-31)/月份(1-12)/星期中星期几(0-6)，示例：0 9 * * * 代表每天九点执行"),
        content: z.string().describe("用户描述的任务内容"),
    }),
    func: async ({ taskType, cronExpression, content }, context) => {
        // 转换为 unix 风格的 cron
        const record = await prisma.t_schedule_task.create({
            data: {
                content: content,
                cron_expression: cronExpression,
                create_account_no: context.user.id,
                create_account_name: context.user.name,
                book_id: context.book.id,
                book_name: context.book.name,
                task_type: taskType,
                status: TaskStatus.VALID,
            },
            select: {
                id: true,
            }
        });

        await createTask(record.id, cronExpression, content);
        return `任务创建成功，编号为${record.id}，请告知客户任务编号以及下一次任务执行时间`;
    }
}